PushNotifications-JMS
PushNotifications attached business rule can be configured to send downstream messages when an activity processing is completed and before committing the persisted data to DB. These messages are delivered to the downstream for the events defined in the DownstreamMessagePushDefinition rule through JMS. The rule can be overridden at Activity Plan, Activity Policy, Activity Client, Activity Company and is applicable for all activity types.
Note: The rule should not be listed in the TransactionBusinessRules packet, but will get processed after post assignment and data persist.
The PushNotifications ABR allows the user to define messages for "Successful Activity Processing or when the Activity Processing Fails (OnTransactionFailure)" and send the appropriate messages to the downstream. The rule can be configured to create a business error on activity, to rollback an activity in case of message push failure or to continue processing an activity.
PushNotifications uses custom-built expressions to construct the required messages. Message templates can be created using custom configuration.
Note: Math required for PushNotifications to construct JSTL messages should be defined in Transaction XML. Date generation and date format conversion can be done by configuring a MathVariable. MessageGuid for PushNotifications will be generated by a MathVariable type. Refer to the examples mentioned in the below sections.
Events
A user can configure messages for multiple events and map each event that has one or more messages to different downstream applications. When multiple messages are defined for an event, system validates a condition, and sends appropriate message to the downstream.
<PushNotifications> may include multiple <PushNotification> for each event, which can be triggered for a particular EVENTNAME that is defined as <Event> in DownstreamMessagePushDefinition rule.
Transactions
PushNotifications can be configured to push messages for all activity types of all entities such as Plan, Policy (Policy document, Policy financial etc.), Client, Company and Customer.
<OnPushFailure>: Defines an action that needs to be taken in case of Push failure. It can be configured to,
- define an action to be taken in case of exceptions during message push such as, call to the external system fails or timeout. An activity can be rolled back in case of push failure.
- display business errors and warnings in case of push failure.
- generate errors and warnings for an activity, when <RollBack> is 'Yes' and <CreateBusinessError> is 'Yes' .
- generate errors and warnings for an activity, when <RollBack> is 'No' and <CreateBusinessError> is 'Yes' .
<OnTransactionFailure>:Creates an error message or an indication that should be pushed to downstream when an activity processing fails.
- If PushNotifications ABR has error configuration for OnTransactionFailure, then an error message is sent to downstream in case of activity failure. If PushNotification event doesn't have OnTransactionFailure message configured, no message is sent to downstream if activity fails.
- Multiple OnTransactionFailure messages for each event can be defined in OnTransactionFailure message section of PushNotifications. Each event can have a single OnTransactionFailure message. OnTransactionFailure message is sent to all the events defined in PushNotifications.
Note: configuring a message using <OnTransactioFailure> is optional.
Activity XML: Activity XML of PushNotifications captures the status and reason for failure of an activity processing.
Request and Response for PushNotifications
Request format | Responses |
|
|
Element/Tag | Parent Element | Definition | Attribute | Element/Attribute Value and Description |
---|---|---|---|---|
<PushNotifications> | Opening tag of PushNotifications Business rule. | |||
<Templates> | <PushNotifications> | Parent tag for templates. | ||
<Template> | <Templates> | Optional: Messages to be reused can be defined as template. | ||
<Template> | ID | Name / id of the message | ||
<JSTLMessage> | <Template> | Required: JSLT tags to create message. | ||
<Parameters> | <JSTLMessage> | Parent tag for parameters | ||
<Parameter> | <Parameters> | Required : Parameter mapped to math and passed to JSTL message element. | ||
<Parameter> | NAME | Required: Name of the parameter. | ||
<Parameter> | TYPE | Optional: Type is required for complex math types | ||
<Parameter> | DATATYPE | Required: Value is the datatype of math variable. | ||
<PushNotification> | <PushNotifications> | Required and repeatable: Contains all the events and their respective messages. | ||
<PushNotification> | EVENT | Name of the event. | ||
<Tests> | <PushNotification> | Parent tag for test | ||
<Test> | <Tests> | Specifies a test expression. Expression is validated and if it is true the message under the test tag will be pushed. | ||
<Test> | CONDITION | Expression for test condition. | ||
<Message> | <PushNotification> | Required: Parent tag for the message. | ||
<Message> | ID | Name of the message. | ||
<Template> | <Message> | Optional: Reusable template can be combined with message to be sent downstream. | ||
<JSTLMessage> | <Message> | Required: JSLT tags to create message. | ||
<Parameters> | <JSTLMessage> | Contains parameters of JSTL message. | ||
<Parameter> | <Parameters> | Required: Parameter mapped to math and passed to JSTL message element. | ||
<Parameter> | NAME | Required: Name of the parameter. | ||
<Parameter> | TYPE | Optional: Type is required for complex math types. | ||
<Parameter> | DATATYPE | Required: Value is the datatype of math variable. | ||
<OnTransactionFailure> | <PushNotification> |
Optional: Parent tag for transaction failure actions and messages. Indicates activity processing failure, and a message is sent to downstream when an activity processing fails. |
||
<Message> | <OnTransactionFailure> | Optional: Parent tag for message on transaction failure. | ID | Required: Message ID |
<JSTLMessage> | <Message> | Required: JSLT tags to create message | ||
<Parameters> | <JSTLMessage> | Parent tag for parameters | ||
<Parameter> | <Parameters> | Required: Parameter mapped to math and passed to JSTL message element. | ||
<Parameter> | NAME | Required: Name of the parameter | ||
<Parameter> | TYPE | Optional: Type is required for complex math types. | ||
<Parameter> | DATATYPE | Required: Value is the datatype of math variable. | ||
<OnPushFailure> | <PushNotifications> | Required: Parent tag for push failure actions | ||
<RollBack> | <OnPushFailure> |
Required.Values are yes/No Yes: indicates a rollback is required No: indicates rollback is not needed |
||
<CreateBusinessError> | <OnPushFailure> |
Required.Values are yes/No Yes: indicates a business error needs to be created on activity No: indicates business error is not needed |
XML Schema
<PushNotifications> <Templates> <Template ID="[name]"> <Parameters> <Parameter NAME="[name]">[field | variable]</Parameter> <Parameter>...</Parameter> </Parameters> <JSTLMessage> <[parameter name]>[parameter attribute name | literal]</[parameter name]> <[parameter name]>...</[parameter name]> </JSTLMessage> </Template> <Template> ... </Template> </Templates> <PushNotification EVENTNAME="[name]"> <Message ID=""> <Tests> <Test>[condition]</Test> <Test>...</Test> </Tests> <AsEventMessage xmlns="[name space]"> <JSTLTemplate>[id]</JSTLTemplate> <JSTLTemplate>...</JSTLTemplate> <JSTLMessage> <Parameters> <Parameter NAME="[name]" DATATYPE="[TEXT | INTEGER | DECIMAL | DATE | BOOLEAN | CURRENCY | BIGTEXT]" >[]</Parameter> <Parameter>...</Parameter> </Parameters> <[parameter name]>[parameter attribute name | literal]</[parameter name]> <[parameter name]>...</[parameter name]> </JSTLMessage> </AsEventMessage> </Message> <OnTransactionFailure>[failure message id]</OnTransactionFailure> </PushNotification> <OnTransactionFailure> <Message ID="[failure message id]"> <AsEventMessage xmlns="[name space]"> <JSTLTemplate>[id]</JSTLTemplate> <JSTLTemplate>...</JSTLTemplate> <JSTLMessage> <Parameters> <Parameter NAME="[name]" DATATYPE="[TEXT | INTEGER | DECIMAL | DATE | BOOLEAN | CURRENCY | BIGTEXT]" >[]</Parameter> <Parameter>...</Parameter> </Parameters> <[parameter name]>[parameter attribute name | literal]</[parameter name]> <[parameter name]>...</[parameter name]> </JSTLMessage> </AsEventMessage> </Message> <Message> ... </Message> </OnTransactionFailure> <OnPushFailure> <RollbackTransaction>[Yes | No]</RollbackTransaction> <CreateBusinessError>[Yes | No]</CreateBusinessError </OnPushFailure> </PushNotifications>
XML Example 1
<PushNotifications> <Templates> <Template id='Header'> <Parameters> <!-- MessageGuid and MessageDateTime will be auto generated --> <Parameter NAME= MsgGuid>Activity:MsgGUID</Parameter> <Parameter NAME= EFFdate>Activity:Effectivedate</Parameter> <Parameter NAME= ActGuid>Activity:ActivityGuid</Parameter> <Parameter NAME= Datetime>Activity:ActivityDateTime</Parameter> <Parameter NAME= Reverse>Activity:Reverse</Parameter> </Parameters> <JSTLMessage> <MsgGuid>[MsgGuid]</MsgGuid> <EffectiveDate>[EFFdate]</EffectiveDate> <ActivityDateTime>[Datetime]<ActivityDateTime> <ActivityGuid>[ActGuid] </ActivityGuid> <Reverse>[Reverse]</Reverse> </JSTLMessage> </Template> </Templates> <PushNotification EventName='Billing'> <Tests> <Test CONDITION=ListBill='True'> <Template> Header</Template> <Message ID='BillingMsg1'> <Parameters> <Parameter NAME= MsgGuid>Activity:MsgGuid </Parameter> <Parameter NAME= TransactionName>TransactionName </Parameter> <Parameter NAME= Segment>Segment</Parameter> <Parameter NAME= TransactionCount>TransactionCount </Parameter> <Parameter NAME= Event>Activity:Event</Parameter> </Parameters> <JSTLMessage> <Event>[Event]</Event> <MSGGUId>[MsgGuid]</MSGGUId> <!-- A transaction Map with Segment Object Array --> <forEach items="[transactionMap]" var="eachTransaction"> <Transaction name="[eachTransaction.key]"> <forEach items="[ eachTransaction.value]" var="eachSegment"> <Segment name="[eachSegment.name]"> <BillingTotal>[eachSegment.total]</BillingTotal> </Segment> </Transaction> </forEach> </JSTLMessage> </Message> </Test> </Tests> </PushNotification> <OnTransactionFailure> <Message> <Parameters> <Parameter NAME= MsgGuid>Activity:MsgGUID</Parameter> <Parameter NAME= EFFdate>Activity:ActivityEffectivedate</Parameter> <Parameter NAME= PaidToDate>Activity:PaidToDate</Parameter> <Parameter NAME= Fee>Activity:PolicyFee</Parameter> </Parameters> <JSTLMessage> <MsgGuid>[MsgGuid]</MsgGuid> <EffectiveDate>[EFFdate]</EffectiveDate> <ActivityDateTime>[Datetime]<ActivityDateTime> <DueDate>[PaidToDate] </DueDate> <PolicyFee>[Fee]</PolicyFee> </JSTLMessage> </Message> </OnTransactionFailure> <OnPushFailure> <RollbackTransaction>Yes</RollbackTransaction> <CreateBusinessError>Yes</CreateBusinessError> </OnPushFailure> </PushNotifications>
Output Example
<MsgGuid> 9B5AA155-4F7B-46AC-9A92-A253BE14C6B7</MsgGuid>
<EffectiveDate> 2016-11-01</EffectiveDate>
<ActivityDateTime>2018-07-18T09:32:12.643-05:00 <ActivityDateTime>
<ActivityGuid> AB4016A2-573D-4918-A94D-1F786725B717 </ActivityGuid>
<Event>Billing</Event>
<MsgId>BillingMsg1</MsgId>
<Transaction name="Transaction2">
<Segment name="Segment21">
<BillingTotal>111</BillingTotal>
</Segment>
<Segment name="Segment22">
<BillingTotal>222</BillingTotal>
</Segment>
</Transaction>
<Transaction name="Transaction1">
<Segment name="Segment11">
<BillingTotal>100</BillingTotal>
</Segment>
<Segment name="Segment12">
<BillingTotal>200</BillingTotal>
</Segment>
</Transaction>
Output - OnTransactionFailure
<MsgGuid> 9B5AA155-4F7B-46AC-9A92-A253BE14C6B7</MsgGuid>
<EffectiveDate> 2016-11-01</EffectiveDate>
<ActivityDateTime>2018-07-18T09:32:12.643-05:00 <ActivityDateTime>
<ActivityGuid> AB4016A2-573D-4918-A94D-1F786725B717 </ActivityGuid>
<ActivityStatus>Pending</ActivityStatus>
Example of a JSTL Template
<Message> <Parameters> <Parameter name=Eventname>Activity: Event </Parameter> <Parameter name=MsgGuid > Activity:MSgguid </Parameter> <Parameter name=EffectiveDate> Activity:EffDate </Parameter> <Parameter name=PolicyNumber> Activity:PolNumber </Parameter> <Parameter name=PaidToDate> Activity:PaidToDate </Parameter> <Parameter name=ModalPremium> Activity:ModalPremium </Parameter> <Parameter name=EFTModalPremium> Activity: EFTModalPremium </Parameter> <Parameter name=AnnualDiscount> Activity: AnnualDiscount </Parameter> </Parameters> <JSTLMessage> <Event EVENTNAME=[EventName]></Event> <MsgGUID>[MesgGuid] </MsgGUID> <EffectiveDate> [EffectiveDate]</EffectiveDate> <PolicyNumber>[PolicyNumber] </PolicyNumber <PaidToDate>[PaidToDate] </PaidToDate> <Premium> <ModalPremium>[ModalPremium] </ModalPremium> <EFTModalPremium>[EFTModalPremium] </EFTModalPremium> <AnnualDiscount>[AnnualDiscount] </AnnualDiscount> </Premium> </JSTLMessage> </Message>
Output
<Message> <Event EVENTNAME="Billing"> <MsgGUID> 9B5AA155-4F7B-46AC-9A92-A253BE14C6B7</MsgGUID> <EffectiveDate> 2016-11-01</EffectiveDate> <PolicyNumber>A000075449 </PolicyNumber> <PaidToDate>2017-11-01 </PaidToDate> <Premium> <ModalPremium>380 </ModalPremium> <EFTModalPremium>400 </EFTModalPremium> <AnnualDiscount> 20 </AnnualDiscount> </Premium> </Event> </Message>
Parameter Element
The <Parameter> element in PushNotifications is used to map the MathVariable with JSTL message and has attributes TYPE and DATATYPE. DATATYPE is a required attribute whereas TYPE is optional and is required for complex TYPE's. PushNotifications support the following combination of DATATYPE and TYPE.
DATATYPE |
TYPE |
BIGTEXT |
FIELD |
BOOLEAN |
EXPRESSION |
BOOLEAN |
VALUE |
CURRENCY |
FIELD |
DATE |
ACTIVITYFIELD |
DATE |
DATEARRAY |
DATE |
EXPRESSION |
DATE |
FIELD |
DATE |
FUNCTION |
DATE |
FUNCTIONCALL |
DATE |
IIF |
DATE |
PLANFIELD |
DATE |
POLICYFIELD |
DATE |
SQL |
DATE |
SYSTEMDATE |
DATE |
VALUE |
DECIMAL |
EXPRESSION |
DECIMAL |
FIELD |
DECIMAL |
FUNCTION |
DECIMAL |
IIF |
DECIMAL |
MULTIFIELD |
DECIMAL |
NUMERICARRAY |
DECIMAL |
PLANFIELD |
DECIMAL |
POLICYFIELD |
DECIMAL |
SQL |
DECIMAL |
VALUE |
FORMATDATE |
DATE |
FORMATDATE |
DATE |
INTEGER |
FUNCTION |
INTEGER |
INTEGERARRAY |
INTEGER |
SQL |
INTEGER |
VALUE |
INTEGER |
EXPRESSION |
MAP |
COLLECTION |
TEXT |
EXPRESSION |
TEXT |
IIF |
TEXT |
POLICYFIELD |
TEXT |
SQL |
TEXT |
VALUE |
MAP |
STOREDPROCEDURECOLLECTION |
TEXT |
STRINGARRAY |
TEXT |
TEXTARRAY |
TEXTARRAY |
|
INTEGERARRAY |
|
DECIMALARRAY |
|
Example for Date format Conversion in a Transaction
Define two math variables in the transaction xml, one to generate time format and the other for date format conversion. The EVENTDATETIME is printed in the same format if configured in PushNotifications.
<MathVariable VARIABLENAME="EventDateTime" TYPE="DATE" DATATYPE="FORMATDATE" OPERATION="GENERATE" TOFORMAT="yyyy-MM-dd 'at' HH:mm:ss z"></MathVariable>
<MathVariable VARIABLENAME="ActivityEffectiveDate" TYPE="DATE" DATATYPE="FORMATDATE" OPERATION="CONVERT" TOFORMAT="yyyy-MM-dd 'at' HH:mm:ss zs">Activity:EffectiveDate</MathVariable>